package com.plugin.manage.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.plugin.core.model.entity.ElderConsultation;
import com.plugin.manage.common.PageResult;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

/**
 * 咨询记录服务接口
 *
 * @author mark
 * @date 2025-07-30
 */
public interface IConsultationService extends IService<ElderConsultation> {

    /**
     * 获取咨询记录总数
     * 
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 咨询记录总数
     */
    Long getTotalConsultationCount(LocalDateTime startTime, LocalDateTime endTime);

    /**
     * 获取正在跟进中的咨询记录数量
     * 
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 正在跟进中的咨询记录数量
     */
    Long getActiveConsultationCount(LocalDateTime startTime, LocalDateTime endTime);

    /**
     * 获取已签约的咨询记录数量
     * 
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 已签约的咨询记录数量
     */
    Long getSignedConsultationCount(LocalDateTime startTime, LocalDateTime endTime);

    /**
     * 获取咨询整体转化率
     * 
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 转化率（百分比）
     */
    Double getConsultationConversionRate(LocalDateTime startTime, LocalDateTime endTime);

    /**
     * 获取销售人员咨询统计TOP5
     * 
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 销售人员咨询统计TOP5
     */
    List<Map<String, Object>> getSalesPerformanceTop5(LocalDateTime startTime, LocalDateTime endTime);

    /**
     * 获取媒介渠道统计信息
     * 
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 媒介渠道统计信息
     */
    List<Map<String, Object>> getChannelStatistics(LocalDateTime startTime, LocalDateTime endTime);

    /**
     * 获取咨询仪表盘列表 - 三表联查
     * 联查 elder_consultation、elder_info、elder_sales 三张表
     * 支持按咨询人、状态、销售姓名、咨询时间区间筛选
     */
    List<Map<String, Object>> getDashboardList(String consultantName, Integer status, String saleName, 
                                               LocalDateTime startTime, LocalDateTime endTime);

    /**
     * 获取咨询仪表盘列表（分页） - 三表联查
     * 使用MyBatis-Plus分页插件实现低侵入式分页
     * 联查 elder_consultation、elder_info、elder_sales 三张表
     * 支持按咨询人、状态、销售姓名、咨询时间区间筛选
     * 
     * @param consultantName 咨询人姓名（模糊查询）
     * @param status 咨询状态（0-新咨询，1-跟进中，2-已签约，3-已关闭，4-已失效）
     * @param saleName 销售人员姓名（模糊查询）
     * @param startTime 咨询开始时间
     * @param endTime 咨询结束时间
     * @param current 当前页码
     * @param size 每页数量
     * @return 分页结果
     */
    PageResult<Map<String, Object>> getDashboardListPaged(String consultantName, Integer status, String saleName, 
                                                         LocalDateTime startTime, LocalDateTime endTime,
                                                         Long current, Long size);
}
